#include "Comm.hpp"
//用于创建命名管道
class Init
{
public:
    //初始化命名管道
    Init()
    {
        //创建管道
        int n = mkfifo(gpath.c_str(),gmode);
        if(n < 0)//管道创建失败
        {
            cerr<<"mkfifo error"<<endl;
            return;
        }
        cout<<"mkfifo success"<<endl;
    }
    //销毁命名管道
    ~Init()
    {
        int n = unlink(gpath.c_str());//销毁管道
        if(n < 0)
        {
            cerr<<"unlink error"<<endl;
            return;
        }
        cout<<"unlink success"<<endl;
    }
};

Init init;
//管理服务器的类
class Server
{
public:
    //构造函数
    Server():_fd(gdefulted){}
    //打开管道
    bool OpenPipeRead()
    {
        _fd = OpenPipe(READFLAG);
        if(_fd < 0)return false;
        return true;
    }
    //string * 表示输出型参数，将out带出来
    int RecvPipe(string *out)
    {
        char buffer[gsize];
        //打开管道之后需要接收信息----read
        ssize_t n = read(_fd,buffer,sizeof(buffer)-1);//预留一个字节的空间
        if(n > 0)
        {
            buffer[n] = 0;
            *out = buffer;
        }
        //返回读取的字节数
        return n;
    }
    //关闭管道
    void ClosePipe()
    {
        ClosePipeHelper(_fd);
    }
    //析构函数
    ~Server()
    {}
private:
    int _fd;
};